{
  "name": "chatbot_whatsapp_v2_menu",
  "nodes": [
    {
      "parameters": {
        "jsCode": "// Ambil output dari AI Agent\nconst agentOutput = $input.first().json.output || $input.first().json.text;\n\n// Cek apakah ada output. Jika tidak, berhenti.\nif (!agentOutput) {\n  return [];\n}\n\n// 1. Bersihkan teks (Markdown)\nconst cleanedText = agentOutput.replace(/\\*\\*/g, '');\n\n// 2. AMBIL NOMOR HP DARI OUTPUT SEBELUMNYA (Simple Memory carries this)\n// Karena WhatsApp Trigger data sudah di memory, kita ambil dari $input\nconst phoneNumber = $input.first().json.phone_number || $input.first().json.messages?.[0]?.from || 'unknown';\n\n// 3. Potong teks (Chunking) - BATASI 2800 char agar menu muat\nconst longText = cleanedText;\nconst limit = 2800;\nconst chunks = [];\n\nfor (let i = 0; i < longText.length; i += limit) {\n  chunks.push(longText.substring(i, i + limit));\n}\n\n// 4. Menu teks\nconst menuText = `─────────────────────\n\nSilakan pilih topik lain atau sampaikan pertanyaan baru:\n\n1️⃣ *PMK (Penyakit Mulut dan Kuku)*\n2️⃣ *LSD (Lumpy Skin Disease)*\n3️⃣ *Rabies*\n4️⃣ *Vaksinasi*\n5️⃣ *Surveilans PHMS*\n6️⃣ *RPH / RPU*\n7️⃣ *Lainnya*\n\nKetik *nomor* atau langsung *sampaikan pertanyaan* Anda 😊`;\n\n// 5. Outputkan: chunks jawaban + menu sebagai item TERAKHIR\nconst items = [];\n\nchunks.forEach((chunk) => {\n  items.push({\n    json: {\n      text_chunk: chunk,\n      phone_number: phoneNumber\n    }\n  });\n});\n\n// Item terakhir = menu\nitems.push({\n  json: {\n    text_chunk: menuText,\n    phone_number: phoneNumber\n  }\n});\n\nreturn items;\n"
      },
      "type": "n8n-nodes-base.code",
      "typeVersion": 2,
      "position": [
        -2960,
        -496
      ],
      "id": "b466aeae-f61c-442a-ae8e-7a65317aa49e",
      "name": "Code - Chunk & Menu"
    },
    {
      "parameters": {
        "authentication": "serviceAccount",
        "operation": "append",
        "documentId": {
          "__rl": true,
          "value": "1x0pAx5uqI-ttgr9x3qk8gah_72oudcINyr2S_ffPxUQ",
          "mode": "id"
        },
        "sheetName": {
          "__rl": true,
          "value": "Sheet1",
          "mode": "name"
        },
        "columns": {
          "mappingMode": "defineBelow",
          "value": {
            "Waktu ": "={{ $now.setZone('Asia/Makassar').toFormat('yyyy-MM-dd HH:mm:ss') }}",
            "Nomor Pengirim": "={{ $('WhatsApp Trigger').item.json.messages[0].from }}",
            "Nama Pengirim": "={{ $('WhatsApp Trigger').item.json.contacts[0].profile.name }}",
            "pertanyaan": "={{ $('WhatsApp Trigger').item.json.messages[0].text.body }}",
            "Jawaban AI": "={{ \"'\" + $('AI Agent').item.json.output }}"
          },
          "matchingColumns": [],
          "schema": [
            {
              "id": "Waktu ",
              "displayName": "Waktu ",
              "required": false,
              "defaultMatch": false,
              "display": true,
              "type": "string",
              "canBeUsedToMatch": true,
              "removed": false
            },
            {
              "id": "Nomor Pengirim",
              "displayName": "Nomor Pengirim",
              "required": false,
              "defaultMatch": false,
              "display": true,
              "type": "string",
              "canBeUsedToMatch": true,
              "removed": false
            },
            {
              "id": "Nama Pengirim",
              "displayName": "Nama Pengirim",
              "required": false,
              "defaultMatch": false,
              "display": true,
              "type": "string",
              "canBeUsedToMatch": true,
              "removed": false
            },
            {
              "id": "pertanyaan",
              "displayName": "pertanyaan",
              "required": false,
              "defaultMatch": false,
              "display": true,
              "type": "string",
              "canBeUsedToMatch": true,
              "removed": false
            },
            {
              "id": "Jawaban AI",
              "displayName": "Jawaban AI",
              "required": false,
              "defaultMatch": false,
              "display": true,
              "type": "string",
              "canBeUsedToMatch": true,
              "removed": false
            }
          ],
          "attemptToConvertTypes": false,
          "convertFieldsToString": false
        },
        "options": {}
      },
      "type": "n8n-nodes-base.googleSheets",
      "typeVersion": 4.7,
      "position": [
        -2944,
        -272
      ],
      "id": "bdca8148-a413-4d9d-b023-bb2c679adffb",
      "name": "Append row in sheet"
    },
    {
      "parameters": {
        "sessionIdType": "customKey",
        "sessionKey": "={{ $('WhatsApp Trigger').item.json.messages[0].from }}",
        "contextWindowLength": 4
      },
      "type": "@n8n/n8n-nodes-langchain.memoryBufferWindow",
      "typeVersion": 1.3,
      "position": [
        -3376,
        -272
      ],
      "id": "6f21f862-aef7-4d5d-877d-c1c5ef55906d",
      "name": "Simple Memory"
    },
    {
      "parameters": {
        "updates": [
          "messages"
        ],
        "options": {}
      },
      "type": "n8n-nodes-base.whatsAppTrigger",
      "typeVersion": 1,
      "position": [
        -3880,
        -496
      ],
      "id": "722dd447-ee31-4a6a-b426-bd183d73398e",
      "name": "WhatsApp Trigger",
      "webhookId": "03090938-06df-41cb-a8f4-32424cd8d2fd"
    },
    {
      "parameters": {
        "operation": "send",
        "phoneNumberId": "787891024405208",
        "recipientPhoneNumber": "={{ $json.phone_number }}",
        "textBody": "={{ $json.text_chunk }}",
        "additionalFields": {}
      },
      "type": "n8n-nodes-base.whatsApp",
      "typeVersion": 1,
      "position": [
        -2720,
        -496
      ],
      "id": "0ba580ea-56fb-4bbe-8b2b-ceb73b5979b1",
      "name": "Send message",
      "webhookId": "719b46a8-5f30-4807-b510-57f92579a30f",
      "credentials": {
        "whatsAppApi": {
          "id": "zWSbPqUqE1Re9s2y",
          "name": "WhatsApp account"
        }
      }
    },
    {
      "parameters": {
        "method": "POST",
        "url": "=https://graph.facebook.com/v20.0/787891024405208/messages",
        "authentication": "predefinedCredentialType",
        "nodeCredentialType": "whatsAppApi",
        "sendBody": true,
        "specifyBody": "json",
        "jsonBody": "={\n  \"messaging_product\": \"whatsapp\",\n  \"status\": \"read\",\n  \"message_id\": \"{{ $('WhatsApp Trigger').item.json.messages[0].id }}\"\n}",
        "options": {}
      },
      "type": "n8n-nodes-base.httpRequest",
      "typeVersion": 4.3,
      "position": [
        -3680,
        -496
      ],
      "id": "54e2fedf-c476-4b3e-a412-c2d7dc7f7ab5",
      "name": "Mark as Read"
    },
    {
      "parameters": {
        "authentication": "serviceAccount",
        "documentId": {
          "__rl": true,
          "value": "1GCywX8Iq4b32gfin9sylngwr5hcIgEf8ZceUF69aQ0U",
          "mode": "list",
          "cachedResultName": "kata kunci chatbot",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1GCywX8Iq4b32gfin9sylngwr5hcIgEf8ZceUF69aQ0U/edit?usp=drivesdk"
        },
        "sheetName": {
          "__rl": true,
          "value": 1931660499,
          "mode": "list",
          "cachedResultName": "kata_kunci",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1GCywX8Iq4b32gfin9sylngwr5hcIgEf8ZceUF69aQ0U/edit#gid=1931660499"
        },
        "options": {}
      },
      "type": "n8n-nodes-base.googleSheetsTool",
      "typeVersion": 4.7,
      "position": [
        -3200,
        -256
      ],
      "id": "89161c42-0abb-4f74-8bd2-3a9847268208",
      "name": "Get row(s) in sheet in Google Sheets1"
    },
    {
      "parameters": {
        "model": {
          "__rl": true,
          "value": "gpt-5.2",
          "mode": "list",
          "cachedResultName": "gpt-5.2"
        },
        "builtInTools": {},
        "options": {}
      },
      "type": "@n8n/n8n-nodes-langchain.lmChatOpenAi",
      "typeVersion": 1.3,
      "position": [
        -3504,
        -288
      ],
      "id": "d565cb00-8e13-4333-a8e7-b6a1e1f8de9f",
      "name": "OpenAI Chat Model"
    },
    {
      "parameters": {
        "promptType": "define",
        "text": "={{ $('WhatsApp Trigger').item.json.messages[0].text.body }}",
        "options": {
          "systemMessage": "=WAKTU SAAT INI: {{ $now.setZone('Asia/Makassar').toFormat('HH:mm') }} WITA.\n\nINSTRUKSI SAPAAN:\n- Lihat \"WAKTU SAAT INI\" di atas.\n- Jika jam 04:00 - 10:00, ucapkan \"Selamat Pagi\".\n- Jika jam 10:01 - 15:00, ucapkan \"Selamat Siang\".\n- Jika jam 15:01 - 18:00, ucapkan \"Selamat Sore\".\n- Jika jam 18:01 - 03:59, ucapkan \"Selamat Malam\".\n- Selalu awali jawabanmu dengan sapaan tersebut diikuti nama penanya (jika ada), contoh: \"Selamat Siang, Pak Budi.\"\n\nKamu adalah dokter hewan virtual dari Dinas Perkebunan dan Peternakan Provinsi Kalimantan Selatan, yang bernama drh. Edi Santosa, Kamu sangat ahli dalam penyakit hewan dan peternakan dan informatif.\n\nATURAN PALING UTAMA, TANPA PENGECUALIAN:\n1.  Untuk SEMUA pertanyaan yang terlihat seperti singkatan (contoh: P2SBPTKP), istilah teknis, nama program, apliksi atau permintaan data spesifik, kamu HARUS menggunakan Google Sheets Tool yang tersedia.\n4.  Berikan jawaban yang informatif namun tetap ringkas di bawah 3000 karakter.\n\nLANGKAH BERPIKIRMU:\n1.  Baca pertanyaan pengguna.\n2.  Tanyakan pada dirimu sendiri: \"Apakah pertanyaan ini kemungkinan besar ada di tool\"\n3.  Jika ya, SEGERA gunakan tool. dan beri jawaban berdasarkan data dari tool\n5.  Jika tool tidak memberikan hasil, kamu jawab berdasarkan pengetahuan umum kamu dengan detil dan lengkap karena kamu adalah dokter hewan yang ahli dalam penyakit hewan dan peternakan\nAturan Tambahan :\n1. jika ada keluhan penyakit hewan dari peternak dan mengetahui kabupaten peternak, agar diarahkan berkonsultasi dengan dokter hewan Puskeswan terdekat dengan alamat puskeswan sesuai dengan database yang ada di tool \n2. jika ada yang bertanya tentang mengirim, membawa, lalulintas anjing, kucing atau kera dan hewan pembawa rabies lainya dari Kalimantan Selatan ke provinsi DKI Jakarta, jawa tengah, Daerah istimewa Yogyakarta, Kepulauan Riau, Bangka Belitung dan Jawa Timur maka diberi penjelasan dengan ramah kalau itu tidak diperbolehkan dengan cara apapun karena memperhatikan situasi/status kesehatan hewan terutama penyakit Rabies dari daerah asal dan daerah tujuan\n3. Jika ada yang bertanya mengenai pemasukan Domba dari luar kalimantan selatan, maka beri penjelasan kalau itu tidak diperbolehkan, beri penjelasan dengan ramah kalau domba bisa menularkan penyakit MCF pada sapi Bali yang banyak terdapat di kalimantan selatan "
        }
      },
      "type": "@n8n/n8n-nodes-langchain.agent",
      "typeVersion": 3,
      "position": [
        -3408,
        -496
      ],
      "id": "3a01759a-7390-4699-9702-bfcc5ee7d1fb",
      "name": "AI Agent"
    }
  ],
  "pinData": {},
  "connections": {
    "Code - Chunk & Menu": {
      "main": [
        [
          {
            "node": "Send message",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Append row in sheet": {
      "main": [
        []
      ]
    },
    "Simple Memory": {
      "ai_memory": [
        [
          {
            "node": "AI Agent",
            "type": "ai_memory",
            "index": 0
          }
        ]
      ]
    },
    "WhatsApp Trigger": {
      "main": [
        [
          {
            "node": "Mark as Read",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Mark as Read": {
      "main": [
        [
          {
            "node": "Simple Memory",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Get row(s) in sheet in Google Sheets1": {
      "ai_tool": [
        [
          {
            "node": "AI Agent",
            "type": "ai_tool",
            "index": 0
          }
        ]
      ]
    },
    "OpenAI Chat Model": {
      "ai_languageModel": [
        [
          {
            "node": "AI Agent",
            "type": "ai_languageModel",
            "index": 0
          }
        ]
      ]
    },
    "AI Agent": {
      "main": [
        [
          {
            "node": "Code - Chunk & Menu",
            "type": "main",
            "index": 0
          },
          {
            "node": "Append row in sheet",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  },
  "active": true,
  "settings": {
    "executionOrder": "v1"
  },
  "versionId": "12029344-a1f6-4b82-8798-901039736c03",
  "meta": {
    "templateCredsSetupCompleted": true,
    "instanceId": "db08498ac86cb0cd1a05b42e3eddbdbf982d774333ab906c3e10c0d2745cf6e0"
  },
  "id": "CWqNus7C1KX4F9ro_v2",
  "tags": []
}
